let { list, userList } = require('./mock')
const bodyParser = require('body-parser')
const Mock = require('mockjs')
// nodejs 插件 专门用来生成token 验证token
const JWT = require('jsonwebtoken')
// 秘钥
const key = 'qwdoqwndoqlw'

module.exports = app => {
	app.use(bodyParser.json())
	// 获取列表
	app.get('/api/list', (req, res) => {
		// 获取搜索内容
		const { value } = req.query;
		// 搜索内容是否存在
		if (value) {
			// 存在搜索
			const newList = list.filter(v => {
				// 筛选所有符合条件的键值
				// 条件: 模糊搜索
				return Object.values(v).some(v => v.includes(value))
			})
			res.send({
				code: 0,
				data: newList,
				message: '数据请求成功~'
			})
		} else {
			// 不存在直接返回所有数据
			res.send({
				code: 0,
				data: list,
				message: '数据请求成功~'
			})
		}
	})

	// 删除
	// 支持多个删除和单个删除
	// id = 'id1, id2, id3, id4'
	app.delete('/api/list/:id', (req, res) => {
		const { id } = req.params
		list = list.filter(v => !id.includes(v.id))
		res.send({
			code: 0,
			data: list,
			message: '数据删除成功~'
		})
	})

	// 添加
	app.post('/api/list', (req, res) => {
		const { address, tel, name, state, tips } = req.body;
		const id = Mock.Random.id();
		list.unshift({
			address, tel, name, state, tips, id
		})
		res.send({
			code: 0,
			data: null,
			message: '数据添加成功~'
		})
	})

	// 更新 要求传递路由路由id
	app.post('/api/list/:id', (req, res) => {
		// 获取动态路由id
		const { id } = req.params;
		// 查找该项id所在的数据
		const item = list.find(v => v.id === id);

		if (item) {
			// 新数据覆原数据
			Object.assign(item, req.body);
			res.send({
				code: 0,
				message: '修改数据成功~',
				data: null
			})
		} else {
			res.send({
				code: -1,
				message: '修改的数据不存在',
				data: null
			})
		}
	})

	// 用户登录接口
	app.post('/api/signin', (req, res) => {
		// 获取用户密码
		const { username, password } = req.body;
		// 验证是否存在
		const user = userList.find(v => v.username === username && v.password === password)

		if (user) {
			res.send({
				code: 0,
				data: {
					nickname: user.nickname,
					permission_ids: user.permission_ids,
					// 生成token令牌
					// const token = JWT.sign(数据, 秘钥)
					token: JWT.sign({
						nickname: user.nickname,
						permission_ids: user.permission_ids,
					}, key)
				},
				message: '登录成功, 欢迎XXX'
			})
		} else {
			res.send({
				code: -1,
				data: null,
				message: '登录失败， 请重新登录'
			})
		}

	})

	// 用户权限信息
	app.get('/api/user/permission', (req, res) => {
		const { token } = req.query;
		try {
			const { nickname, permission_ids } = JWT.verify(token, key);
			res.send({
				code: 0,
				message: '获取用户权限信息成功',
				data: {
					nickname, permission_ids
				}
			})
		} catch {
			res.send({
				code: 403,
				message: '非法token, 请重新登录',
				data: null
			})
		}
	})

	// 柱状图接口
	app.get('/api/echarts', (req, res) => {
		const data = [0, 0, 0, 0];
		list.forEach(v => {
			const index = ['已经收取', '未收取', "正在收取", "收取失败"].indexOf(v.state)
			data[index]++
		})
		res.send({
			code: 0,
			data: {
				xAxis: {
					type: 'category',
					data: ['已经收取', '未收取', "正在收取", "收取失败"]
				},
				yAxis: {
					type: 'value'
				},
				series: [
					{
						data,
						type: 'bar',
						showBackground: true,
						backgroundStyle: {
							color: 'rgba(180, 180, 180, 0.2)'
						}
					}
				]
			},
			message: '数据请求成功'
		})
	})
}